﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using Platform.Model;
using Platform.Model.Repositories;
using PlatformManagement.Properties;
using System.Text.RegularExpressions;
namespace PlatformManagement
{
    public partial class PackageForm : DevComponents.DotNetBar.Metro.MetroForm
    {
        public PackageForm()
        {
            InitializeComponent();
	        sgPackage.PrimaryGrid.AutoGenerateColumns = false;
        }


		protected override void OnActivated(EventArgs e)
		{
			base.OnActivated(e);
			this.WindowState = FormWindowState.Maximized;
		}
        // Load dữ liệu từ Database lên form
		protected override void OnLoad(EventArgs e)
		{
            sgPackage.PrimaryGrid.DataSource = new BindingSource { DataSource = Package.Objects.All };
            base.OnLoad(e);
           
            
		}

        /// <summary>
        /// Sự kiện nhấn Enter lưu thay đổi
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void sgPackage_RowActivating(object sender,
                                             DevComponents.DotNetBar.SuperGrid.GridRowActivatingEventArgs e)
        {
            //Khi dữ liệu nhập vào không đầy đủ
            if (sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 2).Value == null ||
                sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 3).Value == null ||
                sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 4).Value == null)
            {
                MessageBox.Show("You have to enter value for all cells");
                return;
            }
            //Khi dữ liệu nhập vào không đúng kiểu
            //Dữ liệu Net Weight,Natural Loss,Process Loss nhập vào không phải là số
            if (!IsNumber(sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 2).Value.ToString().Trim()) ||
                !IsNumber(sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 3).Value.ToString().Trim()) ||
                !IsNumber(sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 4).Value.ToString().Trim()))
            {
                // Xuất thông báo khi nhập vào số âm
                MessageBox.Show("Net Weight,Natural Loss,Process Loss are number and not negative !");
                OnLoad(e);
                return;
            }
            //  Khi đi hết cột cuối cùng của hàng đó thì dữ liệu mới được cập nhập : Column 4 : cột cuối cùng
            if (sgPackage.PrimaryGrid.IsCellSelected(e.OldActiveRow.Index, 4))
            {
                //Lấy dữ liệu từ hàng trên Form
                var package = new Package()
                    {
                        Id = Convert.ToInt32(sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 0).Value.ToString().Trim()),
                        PckName = sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 1).Value + "",
                        Net = float.Parse(sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 2).Value.ToString().Trim()),
                        NLoss = float.Parse(sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 3).Value.ToString().Trim()),
                        PLoss = float.Parse(sgPackage.PrimaryGrid.GetCell(e.OldActiveRow.Index, 4).Value.ToString().Trim()),
                        LastUpdated = DateTime.Now
                    };
                PackageRepository.Update(package);
                OnLoad(e);
            }
            // Ngược lai, qua hàng mới sẽ thông báo chưa đi hết hàng
            else if (!sgPackage.PrimaryGrid.IsRowSelected(e.NewActiveRow.Index))
            {
                if (DialogResult.OK == MessageBox.Show("You don't go to column final. Datadase not saved ", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning))
                {
                    OnLoad(e);
                }
            }
        }

        //Hàm kiểm tra dữ liệu là số dương
        private bool IsNumber(string pText)
        {
            var regex = new Regex(@"^[+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }
        
        private void PackageForm_Load(object sender, EventArgs e)
        {
        }

        private void sgPackage_DataError(object sender, DevComponents.DotNetBar.SuperGrid.GridDataErrorEventArgs e)
        {
            MessageBox.Show("Input data is incrrect format, data is number");
        }

    }
}